const kafka = require('kafka-node');

class AppBootHook {
  constructor(app) {
    this.app = app;
  }

  configWillLoad() {
    // 此时 config 文件已经被读取并合并，但是还并未生效
    // 这是应用层修改配置的最后时机
    // 注意：此函数只支持同步调用

  }

  async didLoad() {
    // 所有的配置已经加载完毕
    // 可以用来加载应用自定义的文件，启动自定义的服务

  }

  async willReady() {
    // 所有的插件都已启动完毕，但是应用整体还未 ready
    // 可以做一些数据初始化等操作，这些操作成功才会启动应用

  }

  async didReady() {
    // 应用已经启动完毕

    
    const Producer = kafka.Producer;
    const client = new kafka.KafkaClient({
      kafkaHost: "192.168.11.180:9092"
    });


    // const consumer = new kafka.Consumer(client, []);
    // consumer.on('message', function (message) {
    //   console.log('接收一条', message.value);
    // });
    // consumer.addTopics([{ topic: 'Hello-Kafka', partition: 0 }]);




    producer = new Producer(client);

    km = new KeyedMessage('key', 'message'),
    payloads = [
        { topic: 'topic1', messages: 'hi', partition: 0 },
        { topic: 'topic2', messages: ['hello', 'world', km] }
    ];

    producer.on('ready', function () {
      producer.send(payloads, function (err, data) {
          console.log(data);
      });
    });
    producer.on('error', function (err) {})


  }

  async serverDidReady() {
    // http / https server 已启动，开始接受外部请求
    // 此时可以从 app.server 拿到 server 的实例

    this.app.server.on('timeout', socket => {
      // handle socket timeout
    });
  }
}

module.exports = AppBootHook;